package com.youan.pangu.core.mvc.listener;

import com.youan.pangu.base.bean.GlobalValue;
import com.youan.pangu.base.bean.SystemParameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @description:  系统启动监听器，设置系统参数
 * @author: 辛晟昊
 * @time: 2020/3/7 19:51
 */
public class ApplicationStartedListener implements ApplicationListener<ApplicationStartedEvent> {
    @Autowired(required = false)
    private ApplicationParameterLoader loader;
    @Autowired
    private SystemParameter parameter;

    private Logger logger = LoggerFactory.getLogger(GlobalValue.LOOGER_NAME);

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        if(null == loader){
            logger.warn("未设置<ApplicationParameterLoader>实现类，所有运行参数使用默认值。");
            logger.info("系统运行参数中<{}>使用默认值<{}>", "mode", parameter.getMode());
            return;
        }

        //  获取系统参数
        Map<String, String> parameters = loader.getRunningParameter();
        //  校验参数
        logger.info("检查运行时参数,具体参数含义可查看<SystemParameter>类");
        parameter.setMode(checkParameter("mode", parameter.getMode(), parameters));

        parameter.setMap(parameters);
    }

    private String checkParameter(String parameterName, String defaultValue, Map<String, String> parameters) {
        if(!parameters.containsKey(parameterName)){
            logger.warn("系统运行参数中没有<{}>,使用默认值<{}>", parameterName, defaultValue);
            return defaultValue;
        }else {
            String value = parameters.remove(parameterName);
            logger.info("系统运行参数<{}>使用<{}>", parameterName, value);
            return value;
        }
    }

}
